package com.enzoism.springboot.fastjson.a03thisnew;

public class DiveClass2 {
    void print() {
        System.out.println("------>print");
    }

    public InnerClass innerClass() {
        return new InnerClass();
    }

    public class InnerClass {
        public DiveClass2 outer() {
            // 添加this之后，产生的类型自动具有正确的类型
            // 在编译器就被知晓并接收检查，没有任何运行时开销
            // 就是当前【外部类的实例】hash值相等
            return DiveClass2.this;
        }
    }

    public static void main(String[] args) {
        DiveClass2 diveClass = new DiveClass2();

        // 【外链方式直接内部】
        InnerClass innerClass1 = diveClass.innerClass();
        // 【直接创建】
        InnerClass innerClass2 = diveClass.new InnerClass();

        DiveClass2 outer1 = innerClass1.outer();
        outer1.print();

        DiveClass2 outer2 = innerClass2.outer();
        outer2.print();
    }
}
